package com.demo.example;

import com.demo.model.entity.Book;

import java.io.IOException;
import java.util.List;

/**
 * @author shenguangyang
 */
public interface RestHighLevelClientExample {
    /**
     * 创建索引
     */
    void createIndex(String indexName) throws IOException;

    /**
     * 获取索引, 并判断其是否存在
     */
    void indexIsExists(String indexName) throws IOException;

    /**
     * 删除索引
     * @param indexName 索引名称
     */
    void deleteIndex(String indexName) throws IOException;

    /**
     * 保存文档
     * @param indexName 索引
     * @param book 实体
     * @throws IOException
     */
    void saveDocument(String indexName, Book book) throws IOException;

    /**
     * 是否存在文档
     * @param id 文档id
     * @param indexName 索引名称
     */
    void isExistDocument(String indexName, String id) throws IOException;

    /**
     * 通过id查找文档
     * @param id
     */
    void getDocumentById(String indexName, String id) throws IOException;

    /**
     * 更新文档
     */
    void updateDocumentById(String indexName, Book book) throws IOException;

    /**
     * 删除文档
     */
    void deleteDocumentById(String indexName, String id) throws IOException;

    /**
     * 批量保存文档
     */
    void saveDocumentBatch(String indexName, List<Book> books) throws IOException;

    /**
     * 搜索
     * SearchRequest 搜索请求
     * SearchSourceBuilder 条件构造
     * HighlightBuilder 高亮
     * TermQueryBuilder 精确查询
     * MatchAllQueryBuilder
     * @param indexName 索引名字
     * @param keyword 关键字
     */
    void searchDocument(String indexName, String keyword) throws IOException;
}
